home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 201-225 / disk_222 / plplot / src / source.zoo / plbin.c < prev    next >
C/C++ Source or Header  |  1989-05-15  |  2KB  |  66 lines

  1. /* Plot a histogram using the arrays x and y to represent data       */
  2. /* values and frequencies respectively. If centre is false, x values     */
  3. /* denote the lower edge of the bin, and if centre is true, they        */
  4. /* they denote the centre of the bin                                */
  5.  
  6. #include "plplot.h"
  7. #include <math.h>
  8.  
  9. void plbin(nbin,x,y,centre)
  10. int nbin;
  11. int centre;
  12. float x[], y[];
  13. {
  14.  
  15.       int i;
  16.       float xmin, xmax, vpwxmi, vpwxma, vpwymi, vpwyma;
  17.  
  18.       int level;
  19.       glev(&level);
  20.       if (level<3)fatal("Please set up window before calling PLBIN.");
  21.  
  22. /*    Check x[i] are in ascending order */
  23.  
  24.       for(i=0;i<nbin-1;i++)
  25.         if (x[i] >= x[i+1])
  26.            fatal("Elements of X(*) must be increasing in PLBIN.");
  27.  
  28.       gvpw(&vpwxmi,&vpwxma,&vpwymi,&vpwyma);
  29.       if (!centre) {
  30.         for(i=0;i<nbin;i++){
  31.           pljoin(x[i],vpwymi,x[i],y[i]);
  32.           pljoin(x[i],y[i],x[i+1],y[i]);
  33.           pljoin(x[i+1],y[i],x[i+1],vpwymi);
  34.         }
  35.         if (x[nbin-1] < vpwxma) {
  36.           pljoin(x[nbin-1],vpwymi,x[nbin-1],y[nbin-1]);
  37.           pljoin(x[nbin-1],y[nbin-1],vpwxma,y[nbin-1]);
  38.           pljoin(vpwxma,y[nbin-1],vpwxma,vpwymi);
  39.         }
  40.       }
  41.       else {
  42.         if (nbin < 2) return;
  43.         xmin = vpwxmi;
  44.         xmax = max(0.5*(x[1]+x[2]),vpwxmi);
  45.         if (xmin < xmax) {
  46.           pljoin(xmin,vpwymi,xmin,y[1]);
  47.           pljoin(xmin,y[1],xmax,y[1]);
  48.           pljoin(xmax,y[1],xmax,vpwymi);
  49.         }
  50.         for (i=1;i<nbin-1;i++) {
  51.           xmin = xmax;
  52.           xmax = min(0.5*(x[i]+x[i+1]),vpwxma);
  53.           pljoin(xmin,vpwymi,xmin,y[i]);
  54.           pljoin(xmin,y[i],xmax,y[i]);
  55.           pljoin(xmax,y[i],xmax,vpwymi);
  56.         }
  57.         xmin = xmax;
  58.         xmax = vpwxma;
  59.         if (xmin < xmax) {
  60.           pljoin(xmin,vpwymi,xmin,y[nbin]);
  61.           pljoin(xmin,y[nbin],xmax,y[nbin]);
  62.           pljoin(xmax,y[nbin],xmax,vpwymi);
  63.         }
  64.       }
  65. }
  66.